package com.justgame.project.service.just.controller;

import com.justgame.project.base.annotation.ProtectAccess;
import com.justgame.project.cloud.common.constant.Result;
import com.justgame.project.service.api.dto.JustGameInfoDTO;
import com.justgame.project.cloud.common.entity.PageRequest;
import com.justgame.project.service.just.service.JustGameInfoService;
import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import javax.validation.Valid;

@RestController
@RequestMapping("/just/game-info")
public class JustGameInfoController {
    @Resource
    private JustGameInfoService justGameInfoService;

    /**
     * 游戏搜索
     * @param dto
     * @param pageRequest
     * @return
     */
    @GetMapping("search")
    public Result<?> searchList(JustGameInfoDTO dto, PageRequest pageRequest) {
        return Result.OK(justGameInfoService.searchGame(dto, pageRequest));
    }

    /**
     * 获取简要游戏信息
     * @param dto
     * @param pageRequest
     * @return
     */
    @GetMapping("simple-list")
    public Result<?> getSimpleList(JustGameInfoDTO dto, PageRequest pageRequest){
        return Result.OK(justGameInfoService.getSimpleList(dto, pageRequest));
    }

    @PostMapping("save")
    @ProtectAccess(value = 3L, message = "请勿频繁提交！")
    @RequiresRoles("admin")
    public Result<Object> saveGameInfo(@Valid @RequestBody JustGameInfoDTO dto) {
        return Result.status(justGameInfoService.saveData(dto));
    }

    @GetMapping("list")
    @ProtectAccess
    public Result<?> pageList(JustGameInfoDTO dto, PageRequest pageRequest) {
        return Result.OK(justGameInfoService.selectPage(dto, pageRequest));
    }

    /**
     * 管理者修改游戏信息
     *
     * @param dto
     * @return
     */
    @PostMapping("admin-update")
    @ProtectAccess(value = 3L, message = "请勿频繁提交！")
    @RequiresRoles("admin")
    public Result<Object> adminUpdateGame(@Valid @RequestBody JustGameInfoDTO dto) {
        return Result.status(justGameInfoService.updateGame(dto));
    }

    /**
     * 管理者修改游戏信息
     *
     * @param dto
     * @return
     */
    @DeleteMapping("admin-delete")
    @ProtectAccess(message = "请勿频繁提交！")
    @RequiresRoles("admin")
    public Result<Object> adminDeleteGames(@RequestBody JustGameInfoDTO dto) {
        return Result.status(justGameInfoService.adminDeleteGames(dto));
    }

    /**
     * 普通用户修改游戏信息
     *
     * @param dto
     * @return
     */
    @PostMapping("update")
    @ProtectAccess(value = 3L, message = "请勿频繁提交！")
    public Result<Object> updateGame(@Valid @RequestBody JustGameInfoDTO dto) {
        return Result.status(justGameInfoService.userUpdateGame(dto));
    }

    /**
     * 此接口只是给管理人员返回的数据接口，用于反显进行修改编辑操作
     * ！！！ 普通的用户不走此接口 ！！！
     *
     * @param id
     * @return
     */
    @GetMapping("secret-detail")
    @RequiresRoles("admin")
    public Result<?> getSecretDetail(String id) {
        return Result.OK(justGameInfoService.getSecretDetail(id));
    }

    /**
     * 普通的用户查询详情接口
     *
     * @param id
     * @return
     */
    @GetMapping("detail")
    public Result<?> getDetail(String id) {
        return Result.OK(justGameInfoService.getDetail(id));
    }


    /**
     * 加载热门推荐
     */
    @GetMapping("/popular-games")
    public Result<?> getPopularGames() {
        return Result.OK(justGameInfoService.getPopularGames());
    }

    /**
     * 加载最新上架
     */
    @GetMapping("/releases-games")
    public Result<?> getNewReleasesGames() {
        return Result.OK(justGameInfoService.getNewReleasesGames());
    }

    /**
     * 加载口碑最佳
     */
    @GetMapping("/best-evaluation-games")
    public Result<?> getBestEvaluationGames() {
        return Result.OK(justGameInfoService.getBestEvaluationGames());
    }

}
